package com.hznc.wcs.excel.listener;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.diboot.core.util.BeanUtils;
import com.diboot.core.util.ContextHolder;
import com.diboot.core.util.V;
import com.hznc.wcs.excel.model.ModbusSlaveConfigImportModel;
import com.diboot.file.excel.listener.FixedHeadExcelListener;
import com.hznc.wcs.entity.modbusconfig.ModbusSlaveConfig;
import com.hznc.wcs.service.modbusconfig.ModbusSlaveConfigService;

import java.util.List;
import java.util.ArrayList;
import java.util.Map;

/**
* ModbusSalve配置 导入Listener定义
*
* @author MyName
* @version 1.0
* @date 2024-11-29
 * Copyright © MyCorp
*/
public class ModbusSlaveConfigImportListener extends FixedHeadExcelListener<ModbusSlaveConfigImportModel> {
    private static final String CodeFieldName = BeanUtils.convertToFieldName(ModbusSlaveConfigImportModel::getCode);
    /**
    * 自定义校验规则
    *
    * @param dataModelList    待保存的数据
    * @param requestParams  请求参数
    */
    @Override
    protected void additionalValidate(List<ModbusSlaveConfigImportModel> dataModelList, Map<String, Object> requestParams) {
        // 附加校验
        List<String> codeList = new ArrayList<>();
        for (ModbusSlaveConfigImportModel excelModel : dataModelList) {
            if (codeList.contains(excelModel.getCode())) {
                excelModel.addComment(CodeFieldName, "编码重复");
            }
            codeList.add(excelModel.getCode());
        }
        // 系统中校验
        if (V.notEmpty(codeList)) {
            LambdaQueryWrapper<ModbusSlaveConfig> queryWrapper = Wrappers.<ModbusSlaveConfig>lambdaQuery().in(ModbusSlaveConfig::getCode, codeList);
            List<String> duplicateCodeList = ContextHolder.getBean(ModbusSlaveConfigService.class).getValuesOfField(queryWrapper, ModbusSlaveConfig::getCode);
            for (String code : duplicateCodeList) {
                dataModelList.get(codeList.indexOf(code)).addComment(CodeFieldName, "该编码在系统中已存在");
            }
        }
    }

    /**
    * 保存数据
    *
    * @param dataModelList 待保存的数据
    * @param requestParams 请求参数
    */
    @Override
    public void saveData(List<ModbusSlaveConfigImportModel> dataModelList, Map<String, Object> requestParams) {
        if (V.isEmpty(dataModelList)) {
            return;
        }
        List<ModbusSlaveConfig> entityList = BeanUtils.convertList(dataModelList, ModbusSlaveConfig.class);
        ContextHolder.getBean(ModbusSlaveConfigService.class).createEntities(entityList);
    }
}
